using System;
using System.Collections.Generic;
using NHibernate;
using NHibernate.Criterion;
using Sesi.Dados.Entidades;
using Sesi.Dados.Enumeradores;
using Sesi.IRepositorio;

namespace Sesi.Repositorio
{
    
    public class RepositorioPalestras : IRepositorioPalestras
    {
        public Palestras Inserir(Palestras palestras)
        {
            GerenciadorBD.Instance.SessaoAtual().Save(palestras);
            return palestras;
        }

        public Palestras Atualizar(Palestras palestras)
        {
            Palestras tmpPalestras = ObterPorId(palestras.PalestraId);

            tmpPalestras.DataPalestra = palestras.DataPalestra;
            tmpPalestras.Detalhes = palestras.Detalhes;
            tmpPalestras.HorarioInicio = palestras.HorarioInicio;
            tmpPalestras.HorarioTermino = palestras.HorarioTermino;
            tmpPalestras.QuantidadeVagas = palestras.QuantidadeVagas;
            tmpPalestras.Tema = palestras.Tema;
            tmpPalestras.TipoPalestra = palestras.TipoPalestra;

            GerenciadorBD.Instance.SessaoAtual().Update(tmpPalestras);
            return tmpPalestras;
        }

        public void Excluir(Palestras palestras)
        {
            GerenciadorBD.Instance.SessaoAtual().Delete(palestras);
        }

        public IList<Palestras> ObterTodos()
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof(Palestras))
                                   .AddOrder(Order.Asc("Tema"));
            return criteria.List<Palestras>() as List<Palestras>;
        }

        public Palestras ObterPorId(int id)
        {
            return GerenciadorBD.Instance.SessaoAtual().Get<Palestras>(id);
        }

        public IList<Palestras> ObterTodasPalestrasPorTipo(TipoPalestra tipoPalestra)
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof (Palestras))
                .Add(Restrictions.Eq("TipoPalestra", tipoPalestra));

            return criteria.List<Palestras>() as List<Palestras>;
        }
    }
}